u`
eLXgсFp.369uRNVNX̏v
Q[JKFK24A@̕\ƍEړA@̃Aj[V Ȃ

p.369 RNVNX̏

EWFlbNNXł邩ǂƂ͖֌WɁARNVqɂRNVNX̏\
@ eLXgł̓WFlbNȃRNVNX݂̂fڂĂ邪c
EF NX Qƕϐ = new NX{l,c};
E(WFlbNNX̏ꍇ)F NX<^> Qƕϐ = new NX<^>{l,c};
EF
@ArrayList anames = new ArrayList { "Y", "Y", "OY" };
@List<string> names = new List<string> { "Y", "Y", "OY" };

p.369 list02.cs

//p.369 list02.cs
using System;
using System.Collections.Generic; //List<T>p
class list02 {
    public static void Main() {
        List<string> names = new List<string> { "Y", "Y", "OY" }; //RNVq
        foreach (string s in names) { //SvfɂČJԂ
            Console.WriteLine(s);
        }
    }
}

AWKFp.369 list02.cs

EWFlbNNXłArrayListɒu悤

쐬

//AWKFp.369 list02.cs
using System;
using System.Collections; //ArrayListp
class list02 {
    public static void Main() {
        ArrayList anames = new ArrayList { "Y", "Y", "OY" }; //RNVq
        foreach (var s in anames) { //SvfɂČJԂ
            Console.WriteLine(s);
        }
    }
}

p.370iIuWFNgqj

Ep.370 list03.csł(ɐȂ)IuWFNgq𗘗pĂ
EIuWFNgq́uf[^o = l,cv`ŃIuWFNg̏lݒłLq@
EWFlbNNXł邩ǂƂ͖֌W
EF NX Qƕϐ = new NX{ f[^o = l,c};
EF
@class BOOK { public string title; public string author; public decimal price; }
@@F
@BOOK b = new BOOK {title = "䂪y͔Lł", author = "Ėڟ", price = 1050};
EȂǍ`pɂ́Af[^opublicł邱(vpeBɂp͉\)
Ep.370 list03.cŝ悤ɁAIuWFNgqŏIuWFNgARNVqɓnƂ\

p.370 list03.cs

//p.370 list03.cs
using System;
using System.Collections.Generic;
class BOOK {
    public string title;
    public string author;
    public decimal price;
}
class list03 {
    public static void Main() {
        List<BOOK> mybook = new List<BOOK> { //RNVq
            new BOOK {title = "䂪y͔Lł",
                author = "Ėڟ",
                price = 1050}, //IuWFNgq
            new BOOK {title = "_̊Ki",
                author = "nӏ~",
                price = 1600}, //IuWFNgq
            new BOOK {title = "",
                author = "Ėڟ",
                price = 1200} //IuWFNgq
        };
        Console.WriteLine("----ꗗ----");
        foreach (BOOK b in mybook) { //SvfɂČJԂ
             Console.WriteLine("{0}, {1}, {2}~", b.title, b.author, b.price);
        }
    }
}

AWKFp.370 list03.cs

EIuWFNgqŗ\ߏIuWFNgRNVqɓn悤ɏ悤

쐬

//AWKFp.370 list03.cs
using System;
using System.Collections.Generic;
class BOOK {
    public string title;
    public string author;
    public decimal price;
}
class list03 {
    public static void Main() {
        BOOK b1 = new BOOK {title = "䂪y͔Lł", author = "Ėڟ", price = 1050}; //IuWFNgq
        BOOK b2 = new BOOK {title = "_̊Ki", author = "nӏ~", price = 1600}; //IuWFNgq
        BOOK b3 = new BOOK {title = "", author = "Ėڟ", price = 1200}; //IuWFNgq
        List<BOOK> mybook = new List<BOOK> { b1, b2, b3 }; //RNVq
        Console.WriteLine("----ꗗ----");
        foreach (BOOK b in mybook) { //SvfɂČJԂ
             Console.WriteLine("{0}, {1}, {2}~", b.title, b.author, b.price);
        }
    }
}

p.371 WFlbNNXƌp

EWFlbNNX̌pɂ́A^p[^̎w@ɂ鐧
EWFlbNNX̌^p[^ɋ̓IȌ^w肵ĂԂɂāAp̊{NXɂł
EF class hNX : {WFlbNNX<^> {c}
EN[Y\z^ƂAhNX͒ʏNXłWFlbNNXłǂ
@F class Slime : Monster<int> {c}
EWFlbNNX̌^p[^^p[^̂܂܂ɂāAp̊{NXɂł
EF class hNX<^p[^> : {WFlbNNX<^p[^> {c}
EI[v\z^ƂAhNXWFlbNNXɂ
EɂA^p[^̈ps

p.371 generic03.cs

//p.371 generic03.cs
using System;
class MyClass<T> { //{WFlbNNX
    public T x;
}
class MyClass2 : MyClass<int> { //N[Y\z^p
    // public int x; Ƃ݂Ȃ(WFlbN͉Ă)
    public void show() {
        Console.WriteLine(x);
    }
}
class generic03 {
    public static void Main() {
        MyClass2 mc = new MyClass2();
        mc.x = 10; //N[Y\z^Ŏw肵int^ɂȂĂ
        mc.show();
    }
}

AWKFp.371 generic03.cs

EN[Y\z^ł͔hNX͒ʏNXłWFlbNNXłǂ
EMyClass2NXWFlbNNXMyClass2<T>NXɂāAT^̃f[^oyǋLēmF悤
Euclass MyClass<T> {c}vuclass MyClass2<T> : MyClass<int> {c}vƂȂ邪A^p[^͈pȂ̂ŁAQT͕ʂ̂̂ƂĈ

쐬

//AWKFp.371 generic03.cs
using System;
class MyClass<T> { //{WFlbNNX
    public T x;
}
class MyClass2<T> : MyClass<int> { //N[Y\z^pWFlbNNX(^p[^͈pȂ)
    // public int x; Ƃ݂Ȃ(WFlbN͉Ă)
    public T y;
    public void show() {
        Console.WriteLine("x = {0} y = {1}", x, y);
    }
}
class generic03 {
    public static void Main() {
        MyClass2<string> mc = new MyClass2<string>(); //hWFlbNNX̃IuWFNg
        mc.x = 10; //N[Y\z^Ŏw肵int^ɂȂĂ
        mc.y = "Shar"; //WFlbNNX̃IuWFNgŎw肵string^ɂȂĂ
        mc.show();
    }
}

p.372 generic04.cs

//p.372 generic04.cs
using System;
class MyClass<T> { //{WFlbNNX
    public T x;
}
class MyClass2<T> : MyClass<T> { //I[v\z^p 
    // public T x; Ƃ݂Ȃ(w肵^ɂȂ)
    public void show() {
        Console.WriteLine(x);
    }
}
class generic04 {
    public static void Main() {
        MyClass2<int> mc = new MyClass2<int>(); //`ׂ̂ĂTintɂȂ
        mc.x = 2;
        mc.show();
        MyClass2<string> mc2 = new MyClass2<string>(); //`ׂ̂ĂTstringɂȂ
        mc2.x = "test";
        mc2.show();
    }
}

AWKFp.372 generic04.cs

EMyClass2NXWFlbNNXMyClass2<T,U>NXɂāAU^̃f[^oyǋLēmF悤
Euclass MyClass<T> {c}vuclass MyClass2<T,U> : MyClass<T> {c}vƂȂA^p[^T͈pAQT͓̂ƂĈ

쐬

//AWKFp.372 generic04.cs
using System;
class MyClass<T> { //{WFlbNNX
    public T x;
}
class MyClass2<T, U> : MyClass<T> { //I[v\z^p 
    // public T x; Ƃ݂Ȃ(w肵^ɂȂ)
    public U y;
    public void show() {
        Console.WriteLine("x = {0} y = {1}", x, y);
    }
}
class generic04 {
    public static void Main() {
        MyClass2<int, string> mc = new MyClass2<int, string>(); //`ׂ̂ĂTintɂȂ
        mc.x = 2; //^p[^ToRint^ɂȂ
        mc.y = "test"; //^p[^UoRstring^ɂȂ
        mc.show();
    }
}

p.373ǐ^p[^WFlbNNX̌pj

Ě^p[^WFlbNNXpƂASČ^p[^Ɍ^w肷΁AN[Y\z^ɂ邱Ƃł
E邢́Aт̌^p[^WFlbNNXŌp΁AI[v\z^ɂȂ
E܂Aꕔ̌^p[^Ɍ^w肷邱Ƃ\ŁAƃI[v\z^ɂȂ
F class Slime<T> : Monster<T, int> {c}

p.373 generic05.cs

//p.373 generic05.cs
using System;
class MyClass<T, U> { //Q̌^p[^{WFlbNNX
    public T x;
    public U y;
}
class MyClass2<T> : MyClass<T, int> { //LĂȂ^͖I[v\z^
    // Ɂupublic T x;vƂ݂Ȃ
    // Ɂupublic int y;vƂ݂Ȃ
    public void show() {
        Console.WriteLine("x = {0}, y = {1}", x, y);
    }
}
class generic05 {
    public static void Main() {
        MyClass2<string> mc = new MyClass2<string>(); //Ť^̂ݎw肷Ηǂ
        mc.x = "cat"; //Ɏw肵stringTɂȂ
        mc.y = 20; //pɎw肵intUɂȂ
        mc.show();
    }
}

p.374 ^p[^̐

EWFlbNNX̒`ɂāuǂȌ^w肳ĂOKvƂƂ͂܂Ȃ
Ef[^oƒPȃvpeB݂̂NXłΉ\AȂ炩̃\bhꍇAwł^𐧌Kv

E^p[^ɎwłNX𐧖ƂĖ邱Ƃł
EF class WFlbNNX<^p[^> where ^p[^ : NX {c}
EƁAw肵NXyт̔hNX̂݌^p[^Ɏwł
EF class SlimeHouse<T> where T : Slime {c}
@ SlimeHouse<HoimiSlime> m; //w\
EāAw肵NXɒ`Ă郁\bhWFlbNNXŋLq\ɂȂ

EƂāustructvw肷ƁAl^̂݌^p[^Ɏwł
EF class MyCalc<T> where T : struct {c}
@ MyCalc<int> m; //w\
EāAl^ł邱ƂKvȋLq\ɂȂ

EƂāuclassvw肷ƁAQƌ^̂݌^p[^Ɏwł
EF class MonsterHouse<T> where T : class {c}
@ MonsterHouse<Dragon> m; //w\
EāAQƌ^ł邱ƂKvȋLq\ɂȂ

EƂăC^[tFCXw肷ƁAw肵C^[tFCXNX̂݌^p[^Ɏwł
EāAw肵C^[tFCXɒ`Ă郁\bhWFlbNNXŋLq\ɂȂ

EƂāuclass, new()vw肷ƁAftHgRXgN^NX̂݌^p[^Ɏwł
EƂāuNX, new()vw肷ƁAw肵NXyт̔hNXŃftHgRXgN^̂̂݌^p[^Ɏwł
EF class SlimeHouse<T> where T : Slime, new() {c}
@ SlimeHouse<HoimiSlime> m; //HoimiSlimeNXɃftHgRXgN^Ύw\
EāAftHgRXgN^ĂяoWFlbNNXŋLq\ɂȂ

p.375 generic06.cs

//p.375 generic06.cs
using System;
class MyClass {
    public int x;
    public string name;
    public MyClass() { //ftHgRXgN^
        x = 0;
        name = "";
    }
}
//WFlbNNX̒`(T̐FMyClass܂͂̔hNXŃftHgRXgN^L)
class MyClass2<T> where T : MyClass, new() { 
    T p = new T(); //ftHgRXgN^OȂ̂OK
    public void show() {
        //MyClass܂͂̔hNXȂ̂xname邩OK
        Console.WriteLine("x = {0}, p.name = {1}", p.x, p.name); 
    }
    public void setxname(int n, string str) {
        p.x = n; //MyClass܂͂̔hNXȂ̂int^x邩OK
        p.name = str; //MyClass܂͂̔hNXȂ̂string^name邩OK
    }
}
class generic06 {
    public static void Main() {
        MyClass2<MyClass> mc2 = new MyClass2<MyClass>(); //ɔȂ̂OK
        mc2.setxname(100, "abc");
        mc2.show();
    }
}

AWKFp.375 generic06.cs

EMyClass̔hNXYourClass`uMyClass2<YourClass>vŗp\ȂƂmF悤

쐬

//AWKFp.375 generic06.cs
using System;
class MyClass {
    public int x;
    public string name;
    public MyClass() { //ftHgRXgN^
        x = 0;
        name = "";
    }
}
class YourClass : MyClass { //yȉǉzMyClass̔hNX̒`
    //Ɂupublic int x;vƂ݂Ȃ
    //Ɂupublic string name;vƂ݂Ȃ
    public int y;
    public YourClass() { //ftHgRXgN^
        x = 0;
        y = 10;
        name = "";
    }
}
//WFlbNNX̒`(T̐FMyClass܂͂̔hNXŃftHgRXgN^L)
class MyClass2<T> where T : MyClass, new() { 
    T p = new T(); //ftHgRXgN^OȂ̂OK
    public void show() {
        //MyClass܂͂̔hNXȂ̂xname邩OK
        Console.WriteLine("x = {0}, p.name = {1}", p.x, p.name); //hNXy͗ps
    }
    public void setxname(int n, string str) {
        p.x = n; //MyClass܂͂̔hNXȂ̂int^x邩OK
        p.name = str; //MyClass܂͂̔hNXȂ̂string^name邩OK
    }
}
class generic06 {
    public static void Main() {
        MyClass2<YourClass> mc2 = new MyClass2<YourClass>(); //yύXzɔȂ̂OK
        mc2.setxname(100, "abc");
        mc2.show();
    }
}

eLXgю\Fp.377uWFlbN\bhv

Q[JKFK24A@̕\ƍEړA@̃Aj[V Ȃ

e[}28 L[{[h̏Ԃ𓾂iČfځj

EL[̓Cxgp@́uL[ĂԁAZZvɂ͌Ȃ
EɃ^C}[CxgpăL[{[h̏Ԃ𓾂鏈ĂяoĂ炤Ɨǂ
Eɂ́AWindowsAPI񋟂DLLiINCuj̈łuuser32.dllv𒼐ڃC|[g
EC|[g̏F [System.Runtime.InteropServices.DllImport("user32.dll")] Z~Rsv
EƁAɊ܂܂GetKeyState\bhO`wɂ藘p\ɂȂ
EO`w̏F private static extern short GetKeyState(int nVirtKey);
EGetKeyState\bhɈƂKey񋓎qint^ɃLXgė^ƁÃL[ĂΕ̐Ԃ
EC|[gƊO`w̓NX`̐擪ōs

K24 L[ĂXRAAbviČfځj

EL[Key񋓎qKeys.Up
EpāAPlay\bhŁAL[Ă邩`FbNAĂXRACNg悤

쐬

//K24 L[ĂXRAAbv
using System; //tH[AvP[VɕK{
using System.Windows.Forms; //tH[AvP[VɕK{
using System.Drawing; //Imagep
class Program : Form { //FormNXp
    [System.Runtime.InteropServices.DllImport("user32.dll")] //yǉzODLL̃C|[g
    private static extern short GetKeyState(int nVirtKey); //yǉz\bh̊O`w
    Image backb = Image.FromFile("backb.bmp"); //wi摜̓Ǎ
    Image enemy = Image.FromFile("enemy.gif"); //ACe摜̓Ǎ
    Image burn = Image.FromFile("burn.gif"); //ʗp摜̓Ǎ
    Pen mypen = new Pen(Color.Red, 2); //y𐶐(l͐ԁA2)
    Brush bred = new SolidBrush(Color.FromArgb(63, 255, 0, 0)); //uV𐶐(Ԃ̓F)
    Brush byel = new SolidBrush(Color.Yellow); //uV𐶐(F)
    Font f20 = new Font("CI", 20, FontStyle.Bold); //tHg𐶐(CI20P)
    Font f80 = new Font("CI", 80, FontStyle.Bold); //tHg𐶐(CI80P)
    int gamemode = 0; //0:X^[gʁA1:vC
    int score = 0; //XRA
    int backy = 0; //wi摜̂ȂڂYW
    Timer timer = new Timer(); //^C}[𐶐
    void DrawCircle(PaintEventArgs e, Pen p, int x, int y, int r) { //yASWAaw肵ĉ~`
        e.Graphics.DrawEllipse(p, x - r, y - r, 2 * r, 2 * r); //~̕`Ă
    }
    protected override void OnPaint(PaintEventArgs e) { //Form̃\bhI[o[Ch
        base.OnPaint(e); //܂AFormNXɂ郁\bh̓e({ĕ`揈)s
        e.Graphics.DrawImage(backb, 0, backy); //wi摜(0,Ȃ)`
        e.Graphics.DrawImage(backb, 0, backy - backb.Height); //wi摜̏ɕ`
        if (gamemode == 0) { //X^[g
            e.Graphics.DrawString("GAME1", f80, byel, 100, 100); //^Cg̕`
            e.Graphics.DrawString("Hit Enter to Start", f20, byel, 200, 300); //bZ[W̕`
        } else if (gamemode == 1) { //vC
            e.Graphics.FillRectangle(bred, 78, 411, 485, 64); //GA𓧖ԂœhԂ
            e.Graphics.DrawRectangle(mypen, 78, 411, 485, 64); //GA̕`
            string s = String.Format("SCORE:{0:000,000}", score); //XRAҏW
            e.Graphics.DrawString(s, f20, byel, 400, 10); //XRA̕`
        }
    }
    void OnKeyDown(object o, KeyEventArgs e) { //L[{[hꂽɌĂ΂郁\bh
        if(e.KeyCode.ToString() == "Escape") { //EscL[ꂽ
            Close(); //tH[AvP[VI
        }
        if(gamemode == 0 && e.KeyCode.ToString() == "Return") { //X^[gʂEnterL[ꂽ
            gamemode = 1; //vCʂɐ؂ւ
            timer.Start(); //^C}[Jn
            Invalidate(); //ʍĕ`˗
        }
    }
    void Play(object o, EventArgs e) { //^C}[Ă΂郁\bh
        //score++; //y폜zXRAAbv
        backy = (backy < backb.Height) ? backy + 1 : 0; //wi摜̂Ȃڂ
        if (GetKeyState((int)Keys.Up) < 0) { //yȉǉzL[ĂH
            score++; //XRAAbv
        }
        Invalidate(); //ʍĕ`˗
    }
    Program() { //RXgN^
        DoubleBuffered = true; //_uobt@O̓
        KeyDown += new KeyEventHandler(OnKeyDown); //L[{[hꂽɌĂ΂郁\bho^
        timer.Tick += new EventHandler(Play); //^C}[Ă΂郁\bho^
        timer.Interval = 10; //^C}[̊Ԋu
    }
    static void Main() { //public̎w͔C
        Program p = new Program(); //ptH[̃CX^X𐶐
        p.Width = 660; //CX^XWidthvpeBɕ
        p.Height = 520; //CX^XHeightvpeBɍ
        p.Text = "Game"; //CX^XTextvpeBɃtH[
        p.ControlBox = false; //ControlBox\ɂ
        p.FormBorderStyle = FormBorderStyle.Fixed3D; //tH[TCYύX֎~
        Application.Run(p); //CX^Xʂɏo
    }
}

K25 @\Eɓ

E@̒ʏ摜iplayer.gifj_E[hĔzu
@https://rundog.org/si/player.gif
E@ʏ摜ʒu(300,390)`
EL[(Keys.Left)Ă獶10hbgAE(Keys.Right)ȂE10hbgړ
EԂgAXRAAbv͍폜

쐬

//K25 @\Eɓ
using System; //tH[AvP[VɕK{
using System.Windows.Forms; //tH[AvP[VɕK{
using System.Drawing; //Imagep
class Program : Form { //FormNXp
    [System.Runtime.InteropServices.DllImport("user32.dll")] //ODLL̃C|[g
    private static extern short GetKeyState(int nVirtKey); //\bh̊O`w
    Image backb = Image.FromFile("backb.bmp"); //wi摜̓Ǎ
    Image enemy = Image.FromFile("enemy.gif"); //ACe摜̓Ǎ
    Image burn = Image.FromFile("burn.gif"); //ʗp摜̓Ǎ
    Image playeri = Image.FromFile("player.gif"); //yǉz@摜̓Ǎ
    //Pen mypen = new Pen(Color.Red, 2); //y폜zy𐶐(l͐ԁA2)
    //Brush bred = new SolidBrush(Color.FromArgb(63, 255, 0, 0)); //y폜zuV𐶐(Ԃ̓F)
    Brush byel = new SolidBrush(Color.Yellow); //uV𐶐(F)
    Font f20 = new Font("CI", 20, FontStyle.Bold); //tHg𐶐(CI20P)
    Font f80 = new Font("CI", 80, FontStyle.Bold); //tHg𐶐(CI80P)
    int gamemode = 0; //0:X^[gʁA1:vC
    int score = 0; //XRA
    int backy = 0; //wi摜̂ȂڂYW
    int playerx = 300; //yǉz@XW
    Timer timer = new Timer(); //^C}[𐶐
    void DrawCircle(PaintEventArgs e, Pen p, int x, int y, int r) { //yASWAaw肵ĉ~`
        e.Graphics.DrawEllipse(p, x - r, y - r, 2 * r, 2 * r); //~̕`Ă
    }
    protected override void OnPaint(PaintEventArgs e) { //Form̃\bhI[o[Ch
        base.OnPaint(e); //܂AFormNXɂ郁\bh̓e({ĕ`揈)s
        e.Graphics.DrawImage(backb, 0, backy); //wi摜(0,Ȃ)`
        e.Graphics.DrawImage(backb, 0, backy - backb.Height); //wi摜̏ɕ`
        if (gamemode == 0) { //X^[g
            e.Graphics.DrawString("GAME1", f80, byel, 100, 100); //^Cg̕`
            e.Graphics.DrawString("Hit Enter to Start", f20, byel, 200, 300); //bZ[W̕`
        } else if (gamemode == 1) { //vC
            //e.Graphics.FillRectangle(bred, 78, 411, 485, 64); //y폜zGA𓧖ԂœhԂ
            //e.Graphics.DrawRectangle(mypen, 78, 411, 485, 64); //y폜zGA̕`
            string s = String.Format("SCORE:{0:000,000}", score); //XRAҏW
            e.Graphics.DrawString(s, f20, byel, 400, 10); //XRA̕`
            e.Graphics.DrawImage(playeri, playerx, 390); //yǉz@摜`
        }
    }
    void OnKeyDown(object o, KeyEventArgs e) { //L[{[hꂽɌĂ΂郁\bh
        if(e.KeyCode.ToString() == "Escape") { //EscL[ꂽ
            Close(); //tH[AvP[VI
        }
        if(gamemode == 0 && e.KeyCode.ToString() == "Return") { //X^[gʂEnterL[ꂽ
            gamemode = 1; //vCʂɐ؂ւ
            timer.Start(); //^C}[Jn
            Invalidate(); //ʍĕ`˗
        }
    }
    void Play(object o, EventArgs e) { //^C}[Ă΂郁\bh
        backy = (backy < backb.Height) ? backy + 1 : 0; //wi摜̂Ȃڂ
        //if (GetKeyState((int)Keys.Up) < 0) { //yȉ폜zL[ĂH
        //    score++; //XRAAbv
        //}
        if (gamemode == 1) { //yȉǉzvC
            if (GetKeyState((int)Keys.Left) < 0) { //L[ĂH
                playerx -= 10; //@
            }
            if (GetKeyState((int)Keys.Right) < 0) { //L[ĂH
                playerx += 10; //@E
            }
        }
        Invalidate(); //ʍĕ`˗
    }
    Program() { //RXgN^
        DoubleBuffered = true; //_uobt@O̓
        KeyDown += new KeyEventHandler(OnKeyDown); //L[{[hꂽɌĂ΂郁\bho^
        timer.Tick += new EventHandler(Play); //^C}[Ă΂郁\bho^
        timer.Interval = 10; //^C}[̊Ԋu
    }
    static void Main() { //public̎w͔C
        Program p = new Program(); //ptH[̃CX^X𐶐
        p.Width = 660; //CX^XWidthvpeBɕ
        p.Height = 520; //CX^XHeightvpeBɍ
        p.Text = "Game"; //CX^XTextvpeBɃtH[
        p.ControlBox = false; //ControlBox\ɂ
        p.FormBorderStyle = FormBorderStyle.Fixed3D; //tH[TCYύX֎~
        Application.Run(p); //CX^Xʂɏo
    }
}

K25̑ @ړ͈͂̐Ɖ摜ύX

EĂƂA@摜 playerl.gif \悤
@https://rundog.org/si/playerl.gif
EĂƂA@E摜 playerr.gif \悤
@https://rundog.org/si/playerr.gif
EāA@[EE[oȂ悤ɐ悤
EȂAwiA@̕.Widthp邱
E܂A0`FbNŗǂAEXWuwi.Width-@.Widthv𒴂Ƃ͂ݏo\i}[WɂĒj

qg
EƁĂƂAႤ摜\ɂ́A@ǂɌĂ̂ϐplayervpƗǂ
Eplayerv(0:~,-1:,1:E)Aplay\bh̐擪0ɂĂAEĂAΉlɂ
EāAonPaint\bhplayerv̒lɉĕ`悷摜IׂΗǂ

쐬

//K25 @\Eɓ
using System; //tH[AvP[VɕK{
using System.Windows.Forms; //tH[AvP[VɕK{
using System.Drawing; //Imagep
class Program : Form { //FormNXp
    [System.Runtime.InteropServices.DllImport("user32.dll")] //ODLL̃C|[g
    private static extern short GetKeyState(int nVirtKey); //\bh̊O`w
    Image backb = Image.FromFile("backb.bmp"); //wi摜̓Ǎ
    Image enemy = Image.FromFile("enemy.gif"); //ACe摜̓Ǎ
    Image burn = Image.FromFile("burn.gif"); //ʗp摜̓Ǎ
    Image playeri = Image.FromFile("player.gif"); //yǉz@摜̓Ǎ
    Image playerl = Image.FromFile("playerl.gif"); //yǉz@摜̓Ǎ
    Image playerr = Image.FromFile("playerr.gif"); //yǉz@E摜̓Ǎ
    Brush byel = new SolidBrush(Color.Yellow); //uV𐶐(F)
    Font f20 = new Font("CI", 20, FontStyle.Bold); //tHg𐶐(CI20P)
    Font f80 = new Font("CI", 80, FontStyle.Bold); //tHg𐶐(CI80P)
    int gamemode = 0; //0:X^[gʁA1:vC
    int score = 0; //XRA
    int backy = 0; //wi摜̂ȂڂYW
    int playerx = 300; //yǉz@XW
    int playerv = 0; //yǉz@̍Eړ(0:~,-1:,1:E)
    Timer timer = new Timer(); //^C}[𐶐
    protected override void OnPaint(PaintEventArgs e) { //Form̃\bhI[o[Ch
        base.OnPaint(e); //܂AFormNXɂ郁\bh̓e({ĕ`揈)s
        e.Graphics.DrawImage(backb, 0, backy); //wi摜(0,Ȃ)`
        e.Graphics.DrawImage(backb, 0, backy - backb.Height); //wi摜̏ɕ`
        if (gamemode == 0) { //X^[g
            e.Graphics.DrawString("GAME1", f80, byel, 100, 100); //^Cg̕`
            e.Graphics.DrawString("Hit Enter to Start", f20, byel, 200, 300); //bZ[W̕`
        } else if (gamemode == 1) { //vC
            string s = String.Format("SCORE:{0:000,000}", score); //XRAҏW
            e.Graphics.DrawString(s, f20, byel, 400, 10); //XRA̕`
            switch (playerv) { //yȉǉzɍ킹@摜`
                case  0: e.Graphics.DrawImage(playeri, playerx, 390); break;
                case  1: e.Graphics.DrawImage(playerr, playerx, 390); break; 
                case -1: e.Graphics.DrawImage(playerl, playerx, 390); break; 
            }
        }
    }
    void OnKeyDown(object o, KeyEventArgs e) { //L[{[hꂽɌĂ΂郁\bh
        if(e.KeyCode.ToString() == "Escape") { //EscL[ꂽ
            Close(); //tH[AvP[VI
        }
        if(gamemode == 0 && e.KeyCode.ToString() == "Return") { //X^[gʂEnterL[ꂽ
            gamemode = 1; //vCʂɐ؂ւ
            timer.Start(); //^C}[Jn
            Invalidate(); //ʍĕ`˗
        }
    }
    void Play(object o, EventArgs e) { //^C}[Ă΂郁\bh
        backy = (backy < backb.Height) ? backy + 1 : 0; //wi摜̂Ȃڂ
        if (gamemode == 1) { //yȉǉzvC
            playerv = 0; //Ɏ@͒~Ƃ
            if (playerx > 0 && GetKeyState((int)Keys.Left) < 0) { //[ł͂ȂL[ĂH
                playerx -= 10; //@
                playerv = -1; //Ɉړ
            }
            if (playerx < backb.Width - playeri.Width && GetKeyState((int)Keys.Right) < 0) { //E[ł͂ȂL[ĂH
                playerx += 10; //@E
                playerv = 1; //EɈړ
            }
        }
        Invalidate(); //ʍĕ`˗
    }
    Program() { //RXgN^
        DoubleBuffered = true; //_uobt@O̓
        KeyDown += new KeyEventHandler(OnKeyDown); //L[{[hꂽɌĂ΂郁\bho^
        timer.Tick += new EventHandler(Play); //^C}[Ă΂郁\bho^
        timer.Interval = 10; //^C}[̊Ԋu
    }
    static void Main() { //public̎w͔C
        Program p = new Program(); //ptH[̃CX^X𐶐
        p.Width = 660; //CX^XWidthvpeBɕ
        p.Height = 520; //CX^XHeightvpeBɍ
        p.Text = "Game"; //CX^XTextvpeBɃtH[
        p.ControlBox = false; //ControlBox\ɂ
        p.FormBorderStyle = FormBorderStyle.Fixed3D; //tH[TCYύX֎~
        Application.Run(p); //CX^Xʂɏo
    }
}

oFK25 @\Eɓiǉ͊܂łOKj

Q[JK\F摜ʒůǗAe̔ Ȃ
